package com.dmai.capacity.platform.user.service;

import java.util.Map;
import java.util.Set;

import com.dmai.capacity.platform.common.dto.PageResult;
import com.dmai.capacity.platform.common.model.LoginAppUser;
import com.dmai.capacity.platform.common.model.SysUser;
import com.dmai.capacity.platform.user.pojo.request.PasswordEmailRequest;
import com.dmai.capacity.platform.user.pojo.request.PasswordResetRequest;


public interface ISysUserService {
    /**
     * 获取UserDetails对象
     *
     * @param username
     * @return
     */
    LoginAppUser findByUsername(String username);

    LoginAppUser findByOpenId(String username);

    LoginAppUser findByMobile(String username);

    /**
     * 通过SysUser 转换为 LoginAppUser，把roles和permissions也查询出来
     *
     * @param sysUser
     * @return
     */
    LoginAppUser getLoginAppUser(SysUser sysUser);

    /**
     * 根据用户ID查询用户
     *
     * @param userid
     * @return
     */
    SysUser selectByUserid(Long userid);

    /**
     * 根据用户名查询用户
     *
     * @param username
     * @return
     */
    SysUser selectByUsername(String username);

    /**
     * 根据手机号查询用户
     *
     * @param mobile
     * @return
     */
    SysUser selectByMobile(String mobile);

    /**
     * 根据openId查询用户
     *
     * @param openId
     * @return
     */
    SysUser selectByOpenId(String openId);


    /**
     * 根据userId查询用户
     *
     * @param userId
     * @return
     */
    LoginAppUser findByUserId(Long userId);


    /**
     * 忘记密码发送邮件
     */
    boolean sendPasswordResetEmail(PasswordEmailRequest item);


    /**
     * 重置密码
     */
    boolean resetPassword(PasswordResetRequest item);


    /**
     * 增加登录用户
     *
     * @return
     */
    boolean save(SysUser user);


    /**
     * 更新用户
     *
     * @param user
     * @return
     */
    boolean update(SysUser user);


    /**
     * 状态变更
     *
     * @param id
     * @param enabled
     * @return
     */
    boolean updateEnabled(Long id, Boolean enabled);


    /**
     * 更新密码
     *
     * @param id
     * @param oldPassword
     * @param newPassword
     * @return
     */
    boolean updatePassword(Long id, String oldPassword, String newPassword);





    /**
     * 用户分配角色
     *
     * @param id
     * @param roleIds
     */
    void setRoleToUser(Long id, Set<Long> roleIds);


    /**
     * 用户列表
     *
     * @param params
     * @return
     */
    PageResult<SysUser> findUsers(Map<String, Object> params);


    /**
     * 删除用户
     */
    boolean delUser(Long id);


}
